#!/usr/bin/env python
#-*- coding:utf-8 -*-

# 需要安装pillow  pip install pillow

#图片辅助类

from webUtil import webUtil
from file import file
from PIL import Image,ImageFont,ImageFilter,ImageDraw
from conv import conv
from randomHelper import randomHelper

class imageHelper(object):
    
    #从url保存图片到指定路径
    #filename 图片名，默认为原图片名称
    #filepath 图片路径，默认为当前路径
    @staticmethod
    def save(url,filename="",filepath=file.getabspath()):
        
        if filename=="":
            filename=url.split('/')[-1]

        #构造图片路径   
        newfilePath=file.pathjoin(filepath,filename)

        try:
            r=webUtil.httpGet(url,verify=True)
            if r.status_code==200:
                #写入图片二进制到文件
                file.writeByte(newfilePath,r.content)
                return True
            else:
                return False   
        except Exception as e:
            print(e)
            return False

    #缩放指定图
    #filepath 原图地址
    #thumbPath 缩略图地址
    #wzm 缩放宽度比例 1为100%，0.5为50%
    #hzm 缩放高度比例 1为100%，0.5为50%
    @staticmethod
    def thumb(filepath,thumbPath,wzm=1,hzm=1):
        
        if 0<wzm<=1 or 0<hzm<=1:
            img=Image.open(filepath)
            #获取到图片的尺寸
            w,h=img.size
            #按比例缩放
            img.thumbnail((conv.toInt(w*wzm),conv.toInt(h*hzm)))
            #保存图片
            img.save(thumbPath)
        else:
            raise Exception("缩放比例必须在0-1之间")

    #验证码图片
    @staticmethod 
    def verifCode(code,width=200,height=100,fontSize=50):
        #创建图像对象
        image=Image.new('RGB',(width,height),(255,255,255))
        #创建字体对象
        font=ImageFont.truetype('simsun.ttc',fontSize)
        #创建画布
        draw=ImageDraw.Draw(image)

        #填充每个像素
        for x in range(width):
            for y in range(height):
                draw.point((x,y),fill=randomHelper.rndColor())
        
        #输出文字

        for t in range(len(code)):
            print(code[t])
            draw.text((60 * t + 10, 10),code[t],font=font,fill=randomHelper.rndColor2())
        
        image=image.filter(ImageFilter.BLUR)
        
        return image






    